package fr.phil.daoimphql;

import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import fr.phil.daoservice.IservicesPays;
import fr.phil.model.beans.Pays;

/**
 * PhilippeBlog .
 * @author Philippe
 * Package : fr.phil.daoimphql
 * Fichier : ImpHqlPays.java.java
 * Date : 23 janv. 2013 
 */
/**
 * PhilippeBlog .
 * @author Philippe
 * Package : fr.phil.daoimphql
 * Fichier : ImpHqlPays.java
 * Date : 28 janv. 2013 
 */

public class ImpHqlPays  extends HibernateDaoSupport implements IservicesPays {

	// -------------------------------------------------------------
	// Attributs
	// -------------------------------------------------------------

	/**
	 * Le logguer log4j.
	 */
	private static final Logger LOG = Logger.getLogger(ImpHqlPays.class);

	/**
	 * initialisation du bean pays.
	 */
	private transient Pays pays;

	/**
	 * liste des objets Pays.
	 */
	//private List<Pays> listePays = new ArrayList<Pays>();
		
	/**
	 * La session courante d'hibernate.
	 */
	private Session hibSession;
	
	/**
	 * La transaction courante d'hibernate.
	 */
	Transaction hibTransaction;
	
	/**
	 * Erreur de l'operation.
	 */
	private int error = 0;
	
	@Override
	public final int saveObject(final Pays object) {
		LOG.trace("Entering in saveObject " + object.getClass());
		try {
			hibSession = getSessionFactory().getCurrentSession();
			hibTransaction = hibSession.beginTransaction();
			hibSession.save(object);
			hibTransaction.commit();
		} catch (HibernateException e) {
			hibTransaction.rollback();
			error = 1;  
			LOG.error(e);
		}
		LOG.trace("Exit saveObject " + object.getClass() + " : error " + error);
		return error;
		// ou remplacer le tout par un gethibernateTemplate() ...)
	}

	/**
	 * @param plistePaysToAdd = .
	 * @return .
	 */
	public final int saveObject(final List<Pays> plistePaysToAdd) {
		LOG.trace("Entering in saveObject2 ");
		try {
			hibSession = getSessionFactory().getCurrentSession();
			hibTransaction = hibSession.beginTransaction();
			for (Pays paysAjout : plistePaysToAdd) {
				hibSession.saveOrUpdate(paysAjout);
			}
			hibTransaction.commit();
		} catch (DataAccessException e) {
			hibTransaction.rollback();
			LOG.error("save countryList error", e);
			error = 1;  
		} catch (HibernateException e) {
			hibTransaction.rollback();
			LOG.error("save countryList error", e);
			error = 1;  
		} finally {
			getSession().close();
		}
		LOG.trace("Exit saveObject2 : error " + error);
		return error;
	}
	
	@Override
	public final int deleteObject(final Pays object) {
		LOG.trace("Entering in deleteObject " + object.getClass());
		try {
			hibSession = getSessionFactory().getCurrentSession();
			hibTransaction = hibSession.beginTransaction();
			hibSession.delete(object);

			hibTransaction.commit();
		} catch (HibernateException e) {
			hibTransaction.rollback();
			error = 1;			
			LOG.error(e);
		}
		LOG.trace("Exit deleteObject " + object.getClass() 
				+ " : error " + error);
		return error;
	}

	@Override
	public final int updateObject(final Pays object) {
		return error;
	}

	@Override
	public final Pays getObject(final int idObjet) {
		return pays;
	}

	@SuppressWarnings("unchecked")
	@Override
	public final List<Pays> listObject() {
		List<Pays> listePays = null;
		LOG.trace("Entering in Pays listObject");
		try {
			listePays = getHibernateTemplate().find("from Pays");
		} catch (HibernateException e) {
			error = 1;			
			LOG.error(e);
		}
		LOG.trace("Exist listObject Pays : error " + error);
		return listePays;
	}





}
